package compraventa.negocio;

import java.util.Collection;

import compraventa.dao.PublicacionDAO;
import compraventa.excepcion.DAOExcepcion;
import compraventa.modelo.Categoria;
import compraventa.modelo.Publicacion;
import compraventa.modelo.Persona;
import compraventa.test.GestionPublicacionTest;
import compraventa.util.Str;

public class GestionPublicacion {
	public Publicacion insertar(int cantidad,int contador, String descripcion,String estado,String fecha, String fechaFin,double precio, 
			String titulo,  int idCategoria, int idPersona) throws DAOExcepcion
			
			
		{
			Publicacion pub = new Publicacion();
			pub.setCantidad(cantidad);
			pub.setContador(contador);
			pub.setDescripcion(descripcion);
			pub.setPrecio(precio);
			pub.setTitulo(titulo);
			pub.setEstado(estado);
			pub.setFecha(fecha);
			pub.setFechaFin(fechaFin);
			pub.setIdCategoria(idCategoria);
			pub.setIdPersona(idPersona);
			PublicacionDAO dao = new PublicacionDAO();
			
			Validar(pub);
			
			GestionPublicacion g = new GestionPublicacion();
			
			Collection<Publicacion> lista =  g.buscarPorNombre(titulo);
			if(lista.size() >0) 
				throw new DAOExcepcion("Titulo ya Existe"+titulo);
			
			
			dao.insertar(pub);
			return pub;
		}

	private void Validar(Publicacion pub) throws DAOExcepcion {
		Str.esVacioString("Titulo", pub.getTitulo());
		
		 if (pub.getCantidad() <= 0)
			throw new DAOExcepcion("Cantidad debe ser mayor cero"+pub.getCantidad());
		
		Str.esVacioString("Descripcion", pub.getDescripcion());
		
		if (pub.getPrecio() <= 0)
			throw new DAOExcepcion("Precio debe ser mayor cero"); 
		
		
		
		
		
	}

	public Publicacion obtener(int idPublicacion) throws DAOExcepcion{
		Publicacion pub;
		
		PublicacionDAO daoPub = new PublicacionDAO();
		pub = daoPub.obtener(idPublicacion);
		
		GestionCategoria gesCat = new GestionCategoria();
		pub.setCategoria(gesCat.obtener(pub.getIdCategoria()));
		
		GestionPersona gesPer = new GestionPersona();
		Persona per = gesPer.obtener(pub.getIdPersona());
		pub.setPersona(per);
		
		return pub;
	}
	
	public Collection<Publicacion> listarPorContador() throws DAOExcepcion{
		
		PublicacionDAO dao = new PublicacionDAO();
		return dao.listarPorContador("contador desc");
	}
	
	public Collection<Publicacion> listarPorVendidos() throws DAOExcepcion{
		
		PublicacionDAO dao = new PublicacionDAO();
		return dao.listarPorContador("vendidos desc");
	}	

	
	/* BUSCAR PUBLICACION POR TITULO PARA VALIDAR REGISTRO */
	
	public Collection<Publicacion> buscarPorNombre(String nombre)throws DAOExcepcion {
		PublicacionDAO dao = new PublicacionDAO();
		return dao.buscarPorNombre(nombre);
    }
	
	/* BUSCAR PUBLICACION POR TITULO Y DESCRIPCION PARA LISTADO */
	public Collection<Publicacion> buscarxTituloDescrip(String nombre)throws DAOExcepcion {
		PublicacionDAO dao = new PublicacionDAO();
		return dao.buscarxTituloDescrip(nombre);
    }
	
	/* LISTAR CATEGORIAS */
	//
	public Collection<Categoria> listarCategorias()throws DAOExcepcion {
		PublicacionDAO dao = new PublicacionDAO();
		return dao.listarCategorias();
    }
	


}
			